// backend/static/js/scripts.js

// 全局 JavaScript 代码
document.addEventListener('DOMContentLoaded', () => {
    // 当文档内容完全加载后执行以下代码

    // 自动隐藏所有警告框（5秒后淡出）
    setTimeout(() => {
        // 获取所有具有 '.alert' 类的元素
        const alerts = document.querySelectorAll('.alert');

        // 遍历所有警告框
        alerts.forEach(alert => {
            if (alert) {
                // 为当前警告框添加淡出类
                alert.classList.add('fade-out');

                // 设置一个定时器在淡出后移除警告框
                setTimeout(() => {
                    if (alert.parentNode) {
                        // 从父节点中移除警告框
                        alert.parentNode.removeChild(alert);
                    }
                }, 500); // 与CSS中的transition时间匹配（500毫秒）
            }
        });
    }, 5000); // 5秒后执行上述代码

    // 定义全局Token刷新逻辑（使用刷新令牌）
    const refreshToken = async () => {
        try {
            // 向后端发送POST请求以刷新Token
            const response = await fetch('/api/auth/refresh', {
                method: 'POST',
                credentials: 'include' // 确保请求中包含凭证（Cookies）
            });

            // 解析响应数据为JSON格式
            const data = await response.json();
            if (response.ok) {
                // 刷新成功，输出消息
                console.log('Token 已刷新');
            } else {
                // 刷新失败，输出警告并登出
                console.warn('刷新 Token 失败');
                logout();
            }
        } catch (error) {
            // 捕获错误，输出错误信息并登出
            console.error('刷新 Token 时发生错误:', error);
            logout();
        }
    };

    // 设置定时器每55分钟刷新一次 Token（假设 access_token 有效期为1小时）
    setInterval(refreshToken, 55 * 60 * 1000);

    // 定义自动登出用户的函数
    const logout = async () => {
        try {
            // 向后端发送POST请求以登出用户
            await fetch('/api/auth/logout', {
                method: 'POST',
                credentials: 'include', // 请求中包含凭证（Cookies）
            });
            // 登出成功后重定向到首页
            window.location.href = '/';
        } catch (error) {
            // 捕获错误，输出登出时发生的错误信息
            console.error('登出时发生错误:', error);
        }
    };

    // 修改登出按钮的事件监听器
    const logoutButton = document.querySelector('a[href="/logout"]');
    if (logoutButton) {
        // 为登出按钮添加点击事件监听器
        logoutButton.addEventListener('click', async (e) => {
            e.preventDefault(); // 阻止默认的链接行为
            try {
                // 向后端发送POST请求以登出用户
                const response = await fetch('/logout', {
                    method: 'POST',
                    credentials: 'include', // 请求中包含凭证（Cookies）
                });
                if (response.ok) {
                    // 登出成功后重定向到首页
                    window.location.href = '/';
                } else {
                    // 登出失败，输出错误信息
                    console.error('登出失败');
                }
            } catch (error) {
                // 捕获错误，输出登出时发生的错误信息
                console.error('登出时发生错误:', error);
            }
        });
    }
});
